The present application relates to computing and more specifically to software and accompanying systems and methods for managing or allocating computing resources of a computing environment.
Systems for allocating computing resources, including hardware resources, are employed in various demanding applications, including allocation of data center computer processing and memory resources for cloud-based web services and associated applications and databases, allocation of computer resources for individual desktop software programs, various concurrent computing and/or multiprocessing applications, and so on.
Such applications often demand readily configurable dynamic resource management mechanisms for efficient on-demand allocation of computing resources to workloads (which may correspond to particular databases, projects, or other applications and/or processes, etc.), such that competing workloads exhibit minimal mutual interference; require minimal resource reallocation to maximize Quality of Service (QoS); facilitate computing resource capacity planning and load prediction; efficiently accommodate changing workloads, priorities, and hardware topologies; minimize performance of non-critical workloads on critical workloads; maximize system utilization while balancing aforementioned priorities, and so on, all without burdening system administrators or software applications with undue complexity.
Efficient resource management mechanisms are particularly important in multiprocessing applications used in cloud-based enterprise environments, including XaaS (Everything as a Service) environments, where computing resources may be distributed among many servers and may be shared by many enterprise software applications. Computing workloads or tenants (e.g., corresponding to different enterprise database instances) that are consolidated and run using a common set of hardware resources may suffer mutual performance interference and degradation when a given workload becomes more active.
Conventionally, different configurable shares of Central Processing Unit (CPU) cycles may be manually allocated to different workloads, where the maximum allocated CPU cycles are capped for each workload. However, such static or manual binding of workloads to disjoint CPUs often requires detailed knowledge of hardware topology and up-front resource allocation before the various workloads are deployed. In addition, resources required for each workload may be initially unknown, and the addition or removal of a workload to/from the system may require manual reallocation of computing resources. Furthermore, reliance upon such conventional resource allocation methods is often not feasible or practical for cloud-based application deployments, especially those requiring on-demand resource allocations.
Alternatively, CPU threads are automatically allocated to workloads based on available hardware resources, such that the workload threads are spread approximately evenly across computing environment resources. However, with such conventional resource allocation mechanisms, various issues, including mutual workload performance degradation, remain. Hardware architectures that share resources may still exhibit excessive performance interference between workloads.
In general, while certain resource-allocation mechanisms may selectively restrict workload resource consumption, such mechanisms often do not effectively minimize workload performance interference and accompanying mutual performance degradation. Existing mechanisms often ineffectively balance a tradeoff between system resource utilization and workload mutual performance degradation.
Accordingly, traditional computing resource management systems often lack efficient mechanisms for reducing workload mutual performance interference, especially when the computing resources may include several component processors that share various caches, pipelines, and other resources, the various resources of which may be arranged or connected hierarchically.